//package com.gs.cd.service.auth.controller;
//
//import cn.hutool.core.util.StrUtil;
//import com.gs.cd.api.ApiResult;
//import com.gs.cd.api.HttpHeadersParam;
//import com.gs.cd.cloud.start.utils.HttpHeadersParamUtils;
//import com.gs.cd.service.auth.config.AuthConfig;
//import com.gs.cd.service.auth.eum.LoginTypeEnum;
//import com.gs.cd.service.auth.model.AuthUser;
//import com.gs.cd.service.feign.sso.SSOClient;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.web.bind.annotation.PostMapping;
//import org.springframework.web.bind.annotation.RequestBody;
//import org.springframework.web.bind.annotation.RequestMapping;
//import org.springframework.web.bind.annotation.RestController;
//
//import java.util.HashMap;
//import java.util.Map;
//
///**
// * 用户认证
// */
//@RestController
//@RequestMapping("/auth/authUser")
//public class LoginController {
//
//    @Autowired
//    SSOClient ssoClient;
//    @Autowired
//    AuthConfig authConfig;
//
//
//    /**
//     * @param authUser
//     * @return
//     */
//    @PostMapping("login")
//    public ApiResult login(@RequestBody AuthUser authUser) {
//
//        String ticket = HttpHeadersParamUtils.getToken();
//        //标记是否第一次登录或者使用默认密码
//        boolean shouldChangePassword = false;
//
//        try {
//            LoginTypeEnum loginType = getLoginType(ticket);
//            String jwt = "";
//
//            switch (loginType) {
//                case SSO_TOKEN:
//                    user = ssoValidateService.validate(ticket);
//                    jwt = ssoValidateService.createJwt(user, ticket);
//                    SSOTicketWithKIPFTokenCache.put(ticket, jwt);
//                    break;
//                case SSO_PSW:
//                    ticket = ssoValidateService.validate(user.getLoginName(), user.getLoginPassword());
//                    user = ssoValidateService.validate(ticket);
//                    jwt = ssoValidateService.createJwt(user, ticket);
//                    SSOTicketWithKIPFTokenCache.put(ticket, jwt);
//                    break;
//                case LOCAL:
//                    user = localValidateService.validate(user.getLoginName(), user.getLoginPassword());
//                    jwt = localValidateService.createJwt(user);
//                    //本地登录，提醒更改密码
//                    shouldChangePassword = PasswordUtils.equalsPassword(user, authConfig.getDefaultPassword());
//                    break;
//                default:
//                    throw new RuntimeException("Unsupported login type");
//            }
//
//            //进行登录
//            loginShiroService.login(jwt);
//
//
//            //封装返回
//            Map<String, Object> jwtMap = new HashMap<>();
//            jwtMap.put("jwt", jwt);
//            jwtMap.put("should_change_password", shouldChangePassword);
//            jwtMap.put("login_name", user.getLoginName());
//            jwtMap.put("name", user.getName());
//            jwtMap.put("email", user.getEmail());
//
//            jwtMap.put("is_admin", localValidateService.isAdmin(user));
//
//            return ApiResult.success("login success", jwtMap);
//
//        } catch (Exception e) {
//            return ApiResult.error(e.getMessage());
//        }
//    }
//
//
//    /**
//     * 获取登录类型
//     *
//     * @param ssoTicket
//     * @return
//     */
//    private LoginTypeEnum getLoginType(String ssoTicket) {
//        if (authConfig.useSSOLogin()) {
//            if (StrUtil.isNotBlank(ssoTicket)) {
//                return LoginTypeEnum.SSO_TOKEN;
//            } else {
//                return LoginTypeEnum.SSO_PSW;  //无token，通过sso账号密码认证
//            }
//        } else {
//            return LoginTypeEnum.LOCAL;
//        }
//    }
//
//}
